package OptimalAlgorithm.BitOperation;
//实现一个算法，确定一个字符串 s 的所有字符是否全都不同。
//eg:
//输入: s = "leetcode"
//输出: false

public class IsUnique {
    public boolean isUnique(String astr) {
        //利用鸽巢原理进行优化
        if(astr.length() > 26){
            return false;
        }
        //利用位图解决问题
        int n = 0;//把一个数的二进制位当成哈希表使用
        for (int i = 0; i < astr.length(); i++) {
            char c = astr.charAt(i);
            int x = c - 97;
            if((n >> x & 1) == 0){//判断对应字母的二进制位是否为0，如果是0说明之前没有这个字母。
                n = n | (1 << x);//将对应字母的二进制位修改为1，表示出现过了
            }else {
                return false;//反之，出现过这个字母，返回false
            }
        }
        return true;
    }
}
